软件测试技术应用现状调查报告(二)
第一份 软件测试技术应用现状调查报告(一) 发布之后,受到大家的关注,不少网友表示结果很有意义,对软件测试工作未来规划、测试教学都有帮助,之后,还转发了一篇文章究竟什么是模型检验(Model Checking)?帮一些网友紧急补充营养。
现在发布第二份报告,涉及组合测试方法技术、基于搜索的测试方法、模糊测试、变异测试、随机测试、蜕变测试和自动化测试,内容更丰富。由于时间限制,目前分析还比较粗糙,请大家多多包涵,更希望大家多多留言,发表自己的感想,提供其它方面的数据佐证或否定。
8. 在组合优化测试方法中,“正交试验法”居然排第一,让我着实惊奇了一把!这主要还是工业界的贡献,学界只有28.57%。从我认知来看,在组合测试技术的应用中,在业界,两两组合是最常有的,分类树方法也容易应用。但调查结果显示,工业界用“正交试验法”高出“两两组合”近11%。在学界,多数研究者都是围绕两两组合(Pairwise)、3-way或3+-way来开展工作,并结合基于搜索的算法来研究。学界的调查结果,倒是和我的认知一致。
9. 在基于搜索的测试方法中,超过60%的测试人是不了解的,而了解最多的是“随机算法”、“概率算法”,最不了解的是“演化算法”、“元启发算法”,只有4.8%,在工业界最低的算法是元启发算法,只有3.54%,幸好都有人了解。基于搜索的测试方法属于“高大上”的方法,业界和学界差别很大,不清楚的测试人:学界:业界= 66.4% : 23.8%,学界相对乐观,有三分之一人也研究遗传算法、有15%~20%的大学老师研究蚁群算法、粒子群算法、神经网络、元启发算法。即使最低的演化算法,也超过10%。
10. 如果之前没有研究/应用基于搜索的测试方法,主要原因是什么?当然是“不了解”!但实际,这只是工业界的答案,因为之前不清楚的大部分测试人员来自公司,而且这次调查,公司的人数是大学/研究所的人数的2倍。除此之外,大学是觉得“基于搜索的测试方法”有比较多的应用场景,主要是缺乏良好的工具和其它原因,而业界主要认为没有应用场景,也有10%的人认为有应用场景,但困难重重。究竟困难在哪里?大家也可以留言说明。
11. 就模糊测试、变异测试、随机测试、蜕变测试的应用,也有四分之一的人不了解。总体上,认为有价值的方法是模糊测试、随机测试,而且这比例不低,高达44%,而且模糊测试、随机测试两者结果完全一致,很巧合!因为业界在模糊测试的应用 比 学界研究高出很多(15%),真是可喜可贺!业界在模糊测试的应用也高于随机测试,说明业界也重视效率。
而蜕变测试最低,且业界比学界低得多,这也是可以理解的。蜕变测试是通过检查被测程序的多次测试输出之间必要关系的满足性来判定程序输出是否存在错误,侧重研究 Test Oracle 的蜕变关系,这些关系主要是数学上的等价关系。但业界对 Test Oracle 关注不够,有一次在一个公司内训中,问谁知道“Test Oracle”,居然没有人知道。而且在实际的业务测试中难以(自动)产生这些等价关系,或者说ROI(产出投入比)较低。
从多数观点看,模糊测试包括了:
根据模糊控制模型生成测试数据
对原数据进行变异
变异测试是模糊测试的一部分,因此调查题目故意埋下一个陷阱,看看大家是否能够区分,现在看来,有不少人可能没有真正理解模糊测试。
12. 接下来追加了一个模糊测试的问题,模糊(Fuzzing)测试方法主要应用在哪类测试中?结果,总体上/在业界 稳定性测试和可靠性测试 居然 高于安全性测试,又一次surprised。从我认知看,业界做“稳定性测试和可靠性测试”就比较少,这几年倒是安全性测试很热,而且之前还两次出版过“”一书。在学界,和我认知比较接近,安全性模糊测试占了52.4%,远远超过稳定性测试和可靠性测试,而且可靠性测试也高于稳定性测试12%,因为稳定性的概念相对比较含糊。
13. 关于自动化测试,这次没有详细调查其技术和工具,如果加进来,这次调查可能占有大家太多的时间,将来可以针对自动化测试进行专题调查。这次,只是做一个大方向上的调查——未来有显著改善或突破,靠什么?按照调查的结果,主要靠“软件开发的标准化、组件化”。的确,如果软件开发的标准化、组件化,自动化测试是很容易实现的,而现在软件研发是最不遵守标准的、最不规范的。那天在某知名群里讨论着著名丰田汽车案例“有着1万个全局变量的一大坨代码”文章,不少软件人士承认更愿意买手动汽车,手动汽车比全自动汽车安全可靠。
总体上,其它几项措施“软件技术的提高”、“人工智能”、“模型驱动开发”和“云服务”比较接近。但业界和学界差别还是比较大,学界研究算法较多,对人工智能充满信心,所以在学界,“软件开发的标准化、组件化”只占43%,而“人工智能”要占57%,远远高于前者,也远高于工业界的信心(32.3%)。
从我个人看,基于模型的测试(MBT)才能真正算自动化测试,包括模糊测试、人工智能等,人工智能也是需要建模型。目前多数的功能自动化测试都不能算自动化测试,只能算半自动化测试,因为脚本的开发和维护都是人做的,工具主要是完成测试的执行和呈现。只有借助模型,才能自动生成测试数据、才能自动生成脚本、才能进行自动变异、才能进行自动蜕变、才能进行基于数字空间的自动搜索……
(待续)